java的设计模式有多少种-java常用的五种设计模式 java设计模式和应用场景
在软件开发中,设计玩法是化解常见难题的一种有效方法,尤其是在面给对象的编程语言中,如Java。设计玩法不仅能够进步代码的可重用性和可维护性,还能帮助开发者更好地领会体系的结构和设计。在Java中,设计玩法大致可以分为三大类:创建型、结构型和行为型。根据不同的分类,设计玩法的种类也各不相同,通常大家所说的设计玩法主要是指这些常用的玩法。
虽然设计玩法的种类等于丰盛,下面内容是五种在Java开发中常用的设计玩法,分别是单例玩法、工厂玩法、观察者玩法、策略玩法和代理玩法。这五种玩法在Java应用中特别普遍,接下来将逐一进行阐述。
1. 单例玩法
单例玩法(Singleton Pattern)确保某个类只有壹个实例,并提供壹个全局访问点。此玩法常用于需要控制资源访问的场景,例如数据库连接池或线程池。实现单例玩法通常有多种方式,其中懒汉式和饿汉式是最常见的。
懒汉式实现是在第一次调用时创建实例,而饿汉式则是在类加载时创建实例,确保类的全局唯一性。下面内容一个简单的单例玩法的例子:
java public class Singleton { private static Singleton instance; private Singleton() { // 私有构造函数 } public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }2. 工厂玩法
工厂玩法(Factory Pattern)是创建型玩法的一种,主要用于帮助创建对象。工厂玩法可以减小代码之间的耦合,使得体系能够根据不同的条件生成不同的产品对象。通常情况下,工厂玩法分为简单工厂玩法、工厂方式玩法和抽象工厂玩法。
简单工厂玩法利用壹个工厂类,根据输入的参数决定创建哪种具体的对象,这样对于客户端而言,具体的对象细节被封装到了工厂类中,确保隐藏了创建的复杂性。
java public class ShapeFactory { public static Shape getShape(String shapeType) { if (shapeType == null) { return null; } if (shapeType.equalsIgnoreCase(CIRCLE)) { return new Circle(); } else if (shapeType.equalsIgnoreCase(RECTANGLE)) { return new Rectangle(); } return null; } }3. 观察者玩法
观察者玩法(Observer Pattern)是一种行为型玩法,定义了一种一对多的依赖关系,使得当壹个对象改变情形时,全部依赖于它的对象都得到通知并自动更新。防止了对象之间的强耦合。
该玩法通常用于事件处理体系中,例如Java中的事件监听机制。下面内容一个简单的观察者玩法的示例:
java public interface Observer { void update(String message); } public interface Subject { void registerObserver(Observer observer); void notifyObservers(String message); }4. 策略玩法
策略玩法(Strategy Pattern)是一种行为型玩法,定义了一系列算法,将每个算法封装起来,并使它们可以互换。此玩法让算法的变化独立于运用算法的客户端。
在Java中,策略玩法常用于构建付款方法、排序算法等。下面内容一个策略玩法的简单示例:
java public interface PaymentStrategy { void pay(int amount); } public class CreditCardPayment implements PaymentStrategy { public void pay(int amount) { System.out.println(Paid + amount + using Credit Card.); } }5. 代理玩法
代理玩法(Proxy Pattern)是一种结构型玩法,为其它对象提供一种代理以控制对这个对象的访问。通过代理对象,大家可以增加对真正对象的控制,比如延迟初始化、权限控制、日志等。
代理玩法通常用于超距离代理、虚拟代理、保护代理等情景。下面内容一个简单的代理玩法示例:
java public interface Image { void display(); } public class RealImage implements Image { private String filename; public RealImage(String filename) { this.filename = filename; loadImageFromDisk(); } private void loadImageFromDisk() { System.out.println(Loading + filename); } public void display() { System.out.println(Displaying + filename); } } public class ProxyImage implements Image { private RealImage realImage; private String filename; public ProxyImage(String filename) { this.filename = filename; } public void display() { if (realImage == null) { realImage = new RealImage(filename); } realImage.display(); } }如何?怎么样大家都了解了吧,设计玩法为程序开发提供了强有力的工具,使得代码的可读性和可维护性得到了极大的提高。在Java中,开发者应该熟练掌握这些设计玩法,以便能够有效化解各种开发中的难题,进步职业效率。